package com.test.entity.dto;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

@Data
@TableName("db_account_privacy")
// 账户隐私
public class AccountPrivacy {
    @TableId(type = IdType.AUTO)
    final Integer id;
    Integer qq = 1;
    Integer vx = 1;
    Integer phone = 1;
    Integer email = 1;
    Integer gender = 1;
    /**
     * 获取对象中隐藏的字段名数组
     * 通过反射检查对象的所有字段，将值为0的字段名添加到数组中
     * 主要用于识别对象中未显式设置的字段，以便在某些场景下进行特殊处理
     *
     * @return String[] 包含隐藏字段名的数组
     */
    public String[] hiddenFileds(){
        // 创建一个字符串列表，用于存储隐藏字段的名称
        List<String> strings = new ArrayList<>();
        // 获取当前对象的所有声明字段，包括私有、受保护、默认访问和公有的字段
        Field[] fields = this.getClass().getDeclaredFields();
        // 遍历每个字段
        for(Field field : fields){
            try{
                // 设置字段可访问，即使它是私有的
                field.setAccessible(true);
                // 如果字段的值为0，则将其名称添加到列表中
                // 这里假设字段的类型为int，并且0代表未设置或默认状态
                if((int)field.get(this) == 0) strings.add(field.getName());
            }catch (IllegalAccessException e){
                // 如果访问字段值时发生错误，则打印错误信息
                e.printStackTrace();
            }
        }
        // 将列表转换为字符串数组并返回
        return strings.toArray(new String[0]);
    }


}
